iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 8

Day08-概觀(四)AWS Lambda Function Handler in Java

  • 分享至 

  • xImage
  •  

AWS文件:Lambda Function Handler in Java

今天先提一下AWS文件的這部分,對於若要進行Lambda處理其他服務事件會有幫助,同時也為後面處理request/response我所選擇的作法鋪墊。

Handler Interface

AWS提供兩種handler interface,也分別對應不同的I/O型態種類

  • RequestHandler<I, O>
    • Simple Java types (AWS Lambda supports the String, Integer, Boolean, Map, and List types)
    • POJO (Plain Old Java Object) type
  • RequestStreamHandler
    • Stream type

而當Lambda中指定的Handler,也就是template.yaml當中Handler property若僅指定為package class時,預設的即是interface 當中定義的handleRequest method。但實際上可以設定任何符合參數的公開方法,且一個Class可以存在多個Handler method、多個Lambda設定同樣的Handler都是允許的。(所以我就習慣將同樣資源的CRUD或同類功能模組的Handler都放在同一個Class)

對於Handler method 多載解析規則描述AWS文件當中也有提及

處理常式多載解析

如果 Java 程式碼中有多個方法的名稱與 handler 名稱相同,則 AWS Lambda 將使用下列規則來挑選要叫用的方法:
選取具最多參數數目的方法。
如果有兩個以上的方法具有相同參數數量,AWS Lambda 即會選取將 Context 當做最後一個參數的方法。
如果這些參數中沒有或全部具有 Context 參數,便不會定義該行為。

但僅是告訴你是否能成功指定Handler的必要條件,因為這並非一般的method 多載,並沒有依arguments type判斷的能力。舉例來說,從Create a new AWS Lambda function建立S3 Event、Dynamodb Event的sample code會看到Input提供S3Event、DynamodbEvent兩種arguments,但其實都同樣是幫你準備好的POJO type,你高興用自己定義的POJO去接,或是用S3Event的handler接DynamodbEvent都是會照樣進行invoke,只是取不到想要的內容而已。

Sample Java types

這個我現在不知道要寫什麼,因為Lambda能處理的服務來源是開放式的,甚至Lambda可以呼叫另一個Lambda(並非Java自己呼叫自己專案中的method喔)。目前我還沒有特別用到過...

不過覺得自己很喜歡以String方法處理input的話,可以試試看就是了(笑

POJO (Plain Old Java Object) type

實作篇章將使用POJO方法,要注意的是,雖然AWS使用Jackson來實作POJO的部分,但是並不支援annotation這種標註語法 。不過這並非代表我們在request/response針對body(payload)的部分不能使用喔,之後會有詳細的說明。

Stream type

Low-level處理手段,當前面的方式都無法或不適合處理時,就使用這個型別吧。

後記

接下來是針對API Gateway request/response的我流設計方式,但並非只能或這種方式比較好,而是個人目前使用的方式而已。畢竟Java不是我目前工作上的主要語言,不少寫法都是這個月來撰寫測試拼湊出來的,但自覺應該還是嘗試了各種想法,希望能提供有用的意見囉。


上一篇
Day07-概觀(三)Json from Request
下一篇
Day09-實作(一)Request
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言